/**
 * @(#)ISimulatorListenService.java 2017年2月18日
 * Copyright(C) 2017 ZHEXIN IT CO.,LTD. All rights reserved.
 */
package org.jsbd.boss.service;


import java.util.List;
import java.util.Map;

import org.jsbd.boss.domian.channel.ClientHeartBeat;
import org.jsbd.boss.domian.channel.ClientRunInfo;
import org.jsbd.boss.domian.channel.ClientTaskInfo;
import org.jsbd.boss.domian.channel.LocationInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * TODO 请加入本类的说明
 * @author <a href="mailto:zhouchao@xingbook.com" >周超</a>
 * @version 1.0.0
 */
public interface ISimulatorListenService {
	
	public static final Logger LOGGER = LoggerFactory.getLogger(ISimulatorListenService.class);

	/**
	 * 
	 * 更新模拟器状态
	 * @author <a href="mailto:zhouchao@xingbook.com" >周超</a>
	 * @param heartBeat
	 */
	void updateSimulatorStatus(ClientHeartBeat heartBeat);
	
	/**
	 * 
	 * 模拟器获取任务
	 * @author <a href="mailto:zhouchao@xingbook.com" >周超</a>
	 * @param heartBeat
	 * @return
	 */
	ClientTaskInfo getTask(ClientHeartBeat heartBeat);
	/**
	 * 
	 * 获取模拟器列表
	 * @author <a href="mailto:zhouchao@xingbook.com" >周超</a>
	 * @param runInfo
	 * @return
	 */
	List<ClientRunInfo> getSimulatorList(ClientRunInfo runInfo);
	
	/**
	 * 
	 * 添加模拟器任务
	 * @author <a href="mailto:zhouchao@xingbook.com" >周超</a>
	 * @param taskMap
	 */
	void addTask(Map<String,Object> taskMap);
	
	/**
	 * 
	 * 校验模拟器是否已经有任务
	 * @author <a href="mailto:zhouchao@xingbook.com" >周超</a>
	 * @param keyList
	 * @return
	 */
	boolean hasTask(List<Object> keyList);
	/**
	 * 
	 * 删除模拟器任务
	 * @author <a href="mailto:zhouchao@xingbook.com" >周超</a>
	 * @param uuid
	 */
	void removeTask(Object... uuid);
	
	/**
	 * 
	 * 清除模拟器对应的机柜信息
	 * @author <a href="mailto:zhouchao@xingbook.com" >周超</a>
	 */
	void clearLocation();
	
	void clearOffline(String uuids);

	/**
	 * 模拟器在线/离线数量
	 * @param locationInfo
	 * @return
	 */
	List<LocationInfo> getLocationNumList(LocationInfo locationInfo);
	
	/**
	 * 获取重复MAC数据
	 * 
	 * @param runInfo
	 * @return
	 */
	List<ClientRunInfo> getMacRepeatList(ClientRunInfo runInfo);

}
